package com.briup.server.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.briup.server.domain.bean.Menu;
import com.briup.server.domain.dto.MenuDTO;
import com.briup.server.domain.dto.MenuMoveDTO;
import com.briup.server.domain.dto.MenuQueryDTO;
import com.briup.server.domain.vo.MenuVO;
import jakarta.validation.Valid;

import java.util.List;


public interface MenuService extends IService<Menu> {

    /**
     * 查询查询所有的菜单列表（通过权限树的形式返回）
     *
     * @return 菜单列表
     */
    List<MenuVO> listMenus();

    /**
     * 分页查询菜单列表（通过权限树的形式返回）
     *
     * @param menuQueryDTO 菜单查询参数
     * @return 菜单列表
     */
    Page<MenuVO> pageMenus(MenuQueryDTO menuQueryDTO);

    /**
     * 保存或更新菜单
     *
     * @param menuDTO 菜单参数
     */
    void saveOrUpdateMenu(MenuDTO menuDTO);

    /**
     * 菜单移动（移动菜单的位置（必须保证只能在同个父菜单下））
     *
     * @param menuMoveDTO 菜单移动参数
     */
    void moveMenu(@Valid MenuMoveDTO menuMoveDTO);

    /**
     * 删除菜单（如存在子菜单，那么不能删除）
     *
     * @param id 菜单id
     */
    void removeMenu(Long id);
}
